package api

import (
	"bbs-go/internal/services"

	"github.com/kataras/iris/v12"
	"github.com/mlogclub/simple/web"
)

type StatisticsController struct {
	Ctx iris.Context
}

// GetUserregistrationtrendbyday 获取用户注册趋势（按天）
func (c *StatisticsController) GetUserregistrationtrendbyday() *web.JsonResult {
	// 调用服务
	result, err := services.NewStatisticsService().GetUserRegistrationTrendByDay()
	if err != nil {
		return web.JsonErrorMsg("获取用户注册趋势失败")
	}

	return web.JsonData(result)
}

// GetUserregistrationtrendbyweek 获取用户注册趋势（按周）
func (c *StatisticsController) GetUserregistrationtrendbyweek() *web.JsonResult {
	// 调用服务
	result, err := services.NewStatisticsService().GetUserRegistrationTrendByWeek()
	if err != nil {
		return web.JsonErrorMsg("获取用户注册趋势失败")
	}

	return web.JsonData(result)
}

// GetUserregistrationtrendbymonth 获取用户注册趋势（按月）
func (c *StatisticsController) GetUserregistrationtrendbymonth() *web.JsonResult {
	// 调用服务
	result, err := services.NewStatisticsService().GetUserRegistrationTrendByMonth()
	if err != nil {
		return web.JsonErrorMsg("获取用户注册趋势失败")
	}

	return web.JsonData(result)
}

// GetContentpublishingtrendbyday 获取内容发布趋势（按天）
func (c *StatisticsController) GetContentpublishingtrendbyday() *web.JsonResult {
	// 获取内容类型
	contentType := c.Ctx.URLParam("type")
	if contentType != "topic" && contentType != "article" {
		contentType = "topic"
	}

	// 调用服务
	result, err := services.NewStatisticsService().GetContentPublishingTrendByDay(contentType)
	if err != nil {
		return web.JsonErrorMsg("获取内容发布趋势失败")
	}

	return web.JsonData(result)
}

// GetContentpublishingtrendbyweek 获取内容发布趋势（按周）
func (c *StatisticsController) GetContentpublishingtrendbyweek() *web.JsonResult {
	// 获取内容类型
	contentType := c.Ctx.URLParam("type")
	if contentType != "topic" && contentType != "article" {
		contentType = "topic"
	}

	// 调用服务
	result, err := services.NewStatisticsService().GetContentPublishingTrendByWeek(contentType)
	if err != nil {
		return web.JsonErrorMsg("获取内容发布趋势失败")
	}

	return web.JsonData(result)
}

// GetContentpublishingtrendbymonth 获取内容发布趋势（按月）
func (c *StatisticsController) GetContentpublishingtrendbymonth() *web.JsonResult {
	// 获取内容类型
	contentType := c.Ctx.URLParam("type")
	if contentType != "topic" && contentType != "article" {
		contentType = "topic"
	}

	// 调用服务
	result, err := services.NewStatisticsService().GetContentPublishingTrendByMonth(contentType)
	if err != nil {
		return web.JsonErrorMsg("获取内容发布趋势失败")
	}

	return web.JsonData(result)
}

// GetHottopicsbyday 获取热门话题（按天）
func (c *StatisticsController) GetHottopicsbyday() *web.JsonResult {
	// 调用服务
	result, err := services.NewStatisticsService().GetHotTopicsByDay()
	if err != nil {
		return web.JsonErrorMsg("获取热门话题失败")
	}

	return web.JsonData(result)
}

// GetHottopicsbyweek 获取热门话题（按周）
func (c *StatisticsController) GetHottopicsbyweek() *web.JsonResult {
	// 调用服务
	result, err := services.NewStatisticsService().GetHotTopicsByWeek()
	if err != nil {
		return web.JsonErrorMsg("获取热门话题失败")
	}

	return web.JsonData(result)
}

// GetHottopicsbymonth 获取热门话题（按月）
func (c *StatisticsController) GetHottopicsbymonth() *web.JsonResult {
	// 调用服务
	result, err := services.NewStatisticsService().GetHotTopicsByMonth()
	if err != nil {
		return web.JsonErrorMsg("获取热门话题失败")
	}

	return web.JsonData(result)
}
